package com.atguigu.callable;

import java.util.concurrent.*;

/**
 * @author sx
 * @date 2022-02-19 11:42
 */
public class CallableTest {
    public static void main(String[] args) throws ExecutionException, InterruptedException {

        //继承Thread方式
//        new MyThread().start();

        //Runnable方式
//        new Thread(new MyThread()).start();

        //Callable方式
        MyThread thread = new MyThread();
        FutureTask futureTask = new FutureTask(thread);
        new Thread(futureTask).start();

        //get方法可能产生阻塞，可能有耗时的操作，需要等待结果的返回
        //或者使用异步通信处理
        String str = (String) futureTask.get();
        System.out.println(str);

    }
}

/**
 * 继承Thread方式
 */
//class MyThread extends Thread {
//    @Override
//    public void run() {
//        //重写run方法
//        System.out.println("let Thread go!");
//    }
//}

/**
 * Runnable方式
 */
//class MyThread implements Runnable {
//    @Override
//    public void run() {
//        //业务代码
//        System.out.println("let Runnable go!");
//    }
//}

/**
 * Callable方式
 */
class MyThread implements Callable<String> {
    //泛型的参数等于方法的返回值
    @Override
    public String call() throws Exception {
        return "call方法执行";
    }
}
